home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / debugobjects.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.9 KB  |  91 lines

  1. #ifndef _LINUX_DEBUGOBJECTS_H
  2. #define _LINUX_DEBUGOBJECTS_H
  3.  
  4. #include <linux/list.h>
  5. #include <linux/spinlock.h>
  6.  
  7. enum debug_obj_state {
  8.     ODEBUG_STATE_NONE,
  9.     ODEBUG_STATE_INIT,
  10.     ODEBUG_STATE_INACTIVE,
  11.     ODEBUG_STATE_ACTIVE,
  12.     ODEBUG_STATE_DESTROYED,
  13.     ODEBUG_STATE_NOTAVAILABLE,
  14.     ODEBUG_STATE_MAX,
  15. };
  16.  
  17. struct debug_obj_descr;
  18.  
  19. /**
  20.  * struct debug_obj - representaion of an tracked object
  21.  * @node:    hlist node to link the object into the tracker list
  22.  * @state:    tracked object state
  23.  * @object:    pointer to the real object
  24.  * @descr:    pointer to an object type specific debug description structure
  25.  */
  26. struct debug_obj {
  27.     struct hlist_node    node;
  28.     enum debug_obj_state    state;
  29.     void            *object;
  30.     struct debug_obj_descr    *descr;
  31. };
  32.  
  33. /**
  34.  * struct debug_obj_descr - object type specific debug description structure
  35.  * @name:        name of the object typee
  36.  * @fixup_init:        fixup function, which is called when the init check
  37.  *            fails
  38.  * @fixup_activate:    fixup function, which is called when the activate check
  39.  *            fails
  40.  * @fixup_destroy:    fixup function, which is called when the destroy check
  41.  *            fails
  42.  * @fixup_free:        fixup function, which is called when the free check
  43.  *            fails
  44.  */
  45. struct debug_obj_descr {
  46.     const char        *name;
  47.  
  48.     int (*fixup_init)    (void *addr, enum debug_obj_state state);
  49.     int (*fixup_activate)    (void *addr, enum debug_obj_state state);
  50.     int (*fixup_destroy)    (void *addr, enum debug_obj_state state);
  51.     int (*fixup_free)    (void *addr, enum debug_obj_state state);
  52. };
  53.  
  54. #ifdef CONFIG_DEBUG_OBJECTS
  55. extern void debug_object_init      (void *addr, struct debug_obj_descr *descr);
  56. extern void
  57. debug_object_init_on_stack(void *addr, struct debug_obj_descr *descr);
  58. extern void debug_object_activate  (void *addr, struct debug_obj_descr *descr);
  59. extern void debug_object_deactivate(void *addr, struct debug_obj_descr *descr);
  60. extern void debug_object_destroy   (void *addr, struct debug_obj_descr *descr);
  61. extern void debug_object_free      (void *addr, struct debug_obj_descr *descr);
  62.  
  63. extern void debug_objects_early_init(void);
  64. extern void debug_objects_mem_init(void);
  65. #else
  66. static inline void
  67. debug_object_init      (void *addr, struct debug_obj_descr *descr) { }
  68. static inline void
  69. debug_object_init_on_stack(void *addr, struct debug_obj_descr *descr) { }
  70. static inline void
  71. debug_object_activate  (void *addr, struct debug_obj_descr *descr) { }
  72. static inline void
  73. debug_object_deactivate(void *addr, struct debug_obj_descr *descr) { }
  74. static inline void
  75. debug_object_destroy   (void *addr, struct debug_obj_descr *descr) { }
  76. static inline void
  77. debug_object_free      (void *addr, struct debug_obj_descr *descr) { }
  78.  
  79. static inline void debug_objects_early_init(void) { }
  80. static inline void debug_objects_mem_init(void) { }
  81. #endif
  82.  
  83. #ifdef CONFIG_DEBUG_OBJECTS_FREE
  84. extern void debug_check_no_obj_freed(const void *address, unsigned long size);
  85. #else
  86. static inline void
  87. debug_check_no_obj_freed(const void *address, unsigned long size) { }
  88. #endif
  89.  
  90. #endif
  91.